package com.hiraeth.modules.monitor.model.alert;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.hiraeth.modules.monitor.model.RelabelConfig;
import com.hiraeth.modules.monitor.model.common.BasicAuth;
import com.hiraeth.modules.monitor.model.common.TlsConfig;
import com.hiraeth.modules.monitor.model.sd.*;
import com.hiraeth.modules.monitor.model.StaticConfig;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AlertmanagerConfig implements Serializable {
	private static final long serialVersionUID = 3745864329073324779L;

	/**
	 * 推送警报时按目标Alertmanager超时。默认10s
	 */
	private String timeout;

	/**
	 * Alertmanager API 版本
	 */
	private String version;

	/**
	 * 将推送HTTP路径警报的前缀。默认值/
	 */
	private String path_prefix;

	/**
	 * 配置用于请求的协议方案。默认值http
	 */
	private String scheme;

	/**
	 * 使用配置的用户名和密码在每个请求上设置`Authorization`标头。 password和password_file是互斥的。
	 */
	private BasicAuth basic_auth;

	/**
	 * 使用配置的承载令牌在每个请求上设置“Authorization”标头。 它与`bearer_token_file`互斥。
	 */
	private String bearer_token;

	/**
	 * 使用配置的承载令牌在每个请求上设置“Authorization”标头。 它与`bearer_token`互斥。
	 */
	private String bearer_token_file;

	/**
	 * 配置scrape请求的TLS设置。
	 */
	private TlsConfig tls_config;

	/**
	 * 可选的代理URL。
	 */
	private String proxy_url;

	/**
	 * Azure服务发现配置列表。
	 */
	private List<AzureSdConfig> azure_sd_configs;

	/**
	 * Consul服务发现配置列表。
	 */
	private List<ConsulSdConfig> consul_sd_configs;

	/**
	 * DNS服务发现配置列表。
	 */
	private List<DnsSdConfig> dns_sd_configs;

	/**
	 * ECS服务发现配置列表。
	 */
	private List<Ec2SdConfig> ec2_sd_configs;

	/**
	 * 文件服务发现配置列表。
	 */
	private List<FileSdConfig> file_sd_configs;

	/**
	 * GCE服务发现配置列表。
	 */
	private List<GceSdConfig> gce_sd_configs;

	/**
	 * K8_s服务发现配置列表。
	 */
	private List<KubernetesSdConfig> kubernetes_sd_configs;

	/**
	 * Marathon服务发现配置列表。
	 */
	private List<MarathonSdConfig> marathon_sd_configs;

	/**
	 * Air_bn_b's Nerve 服务发现配置列表。
	 */
	private List<NerveSdConfig> nerve_sd_configs;

	/**
	 * Zookepper服务发现配置列表。
	 */
	private List<ServersetSdConfig> serverset_sd_configs;

	/**
	 * Triton服务发现配置列表。
	 */
	private List<TritonSdConfig> triton_sd_configs;

	/**
	 * 标记为静态配置的Alertmanagers列表。
	 */
	private List<StaticConfig> static_configs;

	/**
	 * Alertmanager重新配置列表。
	 */
	private List<RelabelConfig> relabel_configs;

}
